package done.easy_701_800;

import org.junit.Test;

import static com.study.util.LogUtil.info;

/**
 * 706. Design HashMap 设计哈希映射
 * <p>
 * 不使用任何内建的哈希表库设计一个哈希映射
 * 具体地说，你的设计应该包含以下的功能
 * <p>
 * put(key, value)：向哈希映射中插入(键,值)的数值对。如果键对应的值已经存在，更新这个值。
 * get(key)：返回给定的键所对应的值，如果映射中不包含这个键，返回-1。
 * remove(key)：如果映射中存在这个键，删除这个数值对。
 * <p>
 * 键、值分别建数组 keyList 和 valueList
 * ________________
 * |__|__|__|__|__|   keyList  键列表
 * <p>
 * ________________
 * |__|__|__|__|__|  valueList 值列表
 * <p>
 * put:    如果找不到两个列表(k, v)同时 add, 如果找到了覆盖 (put) 前面的 v
 * get:    先从 k 中找 index, 找到了再用 index 查找 v
 * remove: 先从 k 中找 index, 找到了删除 k - v
 */
@SuppressWarnings("all")
public class DesignHashMap {

    // Initialize your data structure here.
    public DesignHashMap() {
        // 190411 first
    }

    // value will always be non-negative.
    public void put(int key, int value) {
        // TODO
    }

    // Returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key
    public int get(int key) {
        return -1;
    }

    // Removes the mapping of the specified value key if this map contains a mapping for the key
    public void remove(int key) {
        // TODO
    }

    @Test
    public void test() {
        DesignHashMap hashMap = new DesignHashMap();
        hashMap.put(1, 1);
        info("put(1, 1)");
        hashMap.put(2, 2);
        info("put(2, 2)");
        hashMap.put(2, 2);
        info("put(2, 2)");
        info("get(1):{}", hashMap.get(1));  // 返回 1
        info("get(3):{}", hashMap.get(3));  // 返回 -1 (未找到)
        hashMap.put(2, 1);                  // 更新已有的值
        info("put(2, 1)");
        info("get(2):{}", hashMap.get(2));   // 返回 1
        hashMap.remove(2);                  // 删除键为2的数据
        info("remove(2)");
        info("get(2):{}", hashMap.get(2));   // 返回 -1 (未找到)
    }
}











































/*
List<Integer> keyList = null;
List<Integer> valueList = null;

public DesignHashMap() {
    keyList = new ArrayList<>();
    valueList = new ArrayList<>();
}

public void put(int key, int value) {
    int index = keyList.indexOf(key);
    if (index == -1) {
        keyList.add(key);
        valueList.add(value);
    } else {
        valueList.set(index, value);
    }
}

public int get(int key) {
    int index = keyList.indexOf(key);
    if(index == -1) {
        return index;
    }
    return valueList.get(index);
}

public void remove(int key) {
    int index = keyList.indexOf(key);
    if (index != -1) {
        keyList.remove(index);
        valueList.remove(index);
    }
}
*/